package com.example.database.service;

import com.example.database.entity.*;
import com.example.database.enums.Status;
import jakarta.servlet.http.HttpSession;

import java.util.List;

public interface StudentService
{
    boolean login(Integer studentId, String password, HttpSession session);

    // 添加学生
    Boolean addStudent(Student student);

    // 删除学生
    Boolean deleteStudentById(Integer studentId);

    // 更新学生信息
    Boolean updateStudent(Student student);

    // 查询学生
    Student findStudentById(Integer studentId);

    // 查询学生对应的辅导员信息
    ClassInstructor findClassInstructorByStudentId(Integer studentId);

    // 查询一个校区的学生
    List<Student> findStudentByCampus(Integer campusId);

    // 查询一个校区的进出信息
    List<InOutLog> findLogByCampus(Integer campusId);

    // 学生填写入校申请
    Boolean addAdmissionForm(AdmissionForm admissionForm);

    // 学生填写出校申请
    Boolean addLeavingForm(LeavingForm leavingForm);

    // 学生填写健康日报
    Boolean addHealthForm(HealthForm healthForm);

    // 查询一位学生过去n天的健康填报信息
    List<HealthForm> findNDaysHealthInfo(Integer studentId, Integer nDays);

    // 查询一位学生的入校申请 通过状态进行筛选
    List<AdmissionForm> findAdmissionFormByStudentId(Integer studentId, Status state);

    // 查询一位学生的出校申请 通过状态进行筛选
    List<LeavingForm> findLeavingFormByStudentId(Integer studentId, Status state);

    // 都需要相关的权限
    // 提交入校申请最多的学生，支持按多级范围（全校、院系、班级）进行筛选；
    List<Student> findMostAdmissionStudentAll();
    List<Student> findMostAdmissionStudentByDept(Integer deptId);
    List<Student> findMostAdmissionStudentByClass(Integer classId);

    String OutOfSchoolTimeOneYearByStudentId(Integer studentId);
    // 已提交出校申请但未离校的学生数量、个人信息；
    Integer regOutButInSchoolNum();
    // 已提交出校申请但未离校的个人信息；
    List<Student> regOutButInSchoolStudentInfo();
    // 已出校但尚未返回校园（即离校状态）的学生数量；
    Integer outSchoolStudentNum();
    // 已出校但尚未返回校园（即离校状态）个人信息(包含了)各自的离校时间；
    List<Student> outSchoolStudentInfo();
}
